#ifndef CONFIG_H
#define CONFIG_H

#include <stdbool.h>

// 配置项类型
enum config_type {
    CONFIG_TYPE_INT,
    CONFIG_TYPE_FLOAT,
    CONFIG_TYPE_STRING,
    CONFIG_TYPE_BOOL
};

/**
 * @brief 初始化配置模块
 * @return 成功返回0，失败返回-1
 */
int config_init(void);

/**
 * @brief 清理配置模块资源
 */
void config_cleanup(void);

/**
 * @brief 加载配置文件
 * @param config_file 配置文件路径
 * @return 成功返回0，失败返回-1
 */
int config_load(const char *config_file);

/**
 * @brief 保存配置到文件
 * @param config_file 配置文件路径（如果为NULL，则使用上次加载的文件）
 * @return 成功返回0，失败返回-1
 */
int config_save(const char *config_file);

/**
 * @brief 获取整数配置项
 * @param key 配置项键名
 * @param default_value 默认值
 * @return 配置项值或默认值
 */
int config_get_int(const char *key, int default_value);

/**
 * @brief 设置整数配置项
 * @param key 配置项键名
 * @param value 配置项值
 * @return 成功返回0，失败返回-1
 */
int config_set_int(const char *key, int value);

/**
 * @brief 获取浮点数配置项
 * @param key 配置项键名
 * @param default_value 默认值
 * @return 配置项值或默认值
 */
float config_get_float(const char *key, float default_value);

/**
 * @brief 设置浮点数配置项
 * @param key 配置项键名
 * @param value 配置项值
 * @return 成功返回0，失败返回-1
 */
int config_set_float(const char *key, float value);

/**
 * @brief 获取字符串配置项
 * @param key 配置项键名
 * @param default_value 默认值
 * @param buffer 输出缓冲区
 * @param buffer_size 缓冲区大小
 * @return 成功返回0，失败返回-1
 */
int config_get_string(const char *key, const char *default_value, char *buffer, int buffer_size);

/**
 * @brief 设置字符串配置项
 * @param key 配置项键名
 * @param value 配置项值
 * @return 成功返回0，失败返回-1
 */
int config_set_string(const char *key, const char *value);

/**
 * @brief 获取布尔配置项
 * @param key 配置项键名
 * @param default_value 默认值
 * @return 配置项值或默认值
 */
bool config_get_bool(const char *key, bool default_value);

/**
 * @brief 设置布尔配置项
 * @param key 配置项键名
 * @param value 配置项值
 * @return 成功返回0，失败返回-1
 */
int config_set_bool(const char *key, bool value);

/**
 * @brief 删除配置项
 * @param key 配置项键名
 * @return 成功返回0，失败返回-1
 */
int config_remove(const char *key);

/**
 * @brief 检查配置项是否存在
 * @param key 配置项键名
 * @return 存在返回true，不存在返回false
 */
bool config_has_key(const char *key);

#endif /* CONFIG_H */